package com.algorithm.liyc.practice;

import java.util.Stack;

/**
 * 用栈实现队列
 * 使用栈实现队列的下列操作：
 * push(x) -- 将一个元素放入队列的尾部。
 * pop() -- 从队列首部移除元素。
 * peek() -- 返回队列首部的元素。
 * empty() -- 返回队列是否为空。
 *
 * @author Liyc
 * @date 2023/12/19 15:36
 **/

public class Solution31 {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public Solution31() {
        stackIn = new Stack<>();// 负责进栈
        stackOut = new Stack<>();// 负责出栈
    }

    public void push(int x) {
        stackIn.push(x);
    }
    public int pop() {
        dumpStack();
        return stackOut.pop();
    }
    public int peek() {
        dumpStack();
        return stackOut.peek();
    }
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    // 如果stackOut为空，那么将stackIn中的元素全部放到stackOut中
    public void dumpStack() {
        if (!stackOut.isEmpty()) return;
        while (!stackIn.isEmpty()) {
            stackOut.push(stackIn.pop());
        }
    }
}
